/*!
 * jQuery Tools v1.2.7 - The missing UI library for the Web
 * 
 * scrollable/scrollable.js
 * tabs/tabs.js
 * tooltip/tooltip.js
 * 
 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
 * 
 * http://flowplayer.org/tools/
 * 
 */
(function(a) {
    a.tools = a.tools || {
        version: "v1.2.7"
    },
    a.tools.scrollable = {
        conf: {
            activeClass: "active",
            circular: !1,
            clonedClass: "cloned",
            disabledClass: "disabled",
            easing: "swing",
            initialIndex: 0,
            item: "> *",
            items: ".items",
            keyboard: !0,
            mousewheel: !1,
            next: ".next",
            prev: ".prev",
            size: 1,
            speed: 400,
            vertical: !1,
            touch: !0,
            wheelSpeed: 0
        }
    };
    function b(a, b) {
        var c = parseInt(a.css(b), 10);
        if (c) return c;
        var d = a[0].currentStyle;
        return d && d.width && parseInt(d.width, 10)
    }
    function c(b, c) {
        var d = a(c);
        return d.length < 2 ? d: b.parent().find(c)
    }
    var d;
    function e(b, e) {
        var f = this,
        g = b.add(f),
        h = b.children(),
        i = 0,
        j = e.vertical;
        d || (d = f),
        h.length > 1 && (h = a(e.items, b)),
        e.size > 1 && (e.circular = !1),
        a.extend(f, {
            getConf: function() {
                return e
            },
            getIndex: function() {
                return i
            },
            getSize: function() {
                return f.getItems().size()
            },
            getNaviButtons: function() {
                return n.add(o)
            },
            getRoot: function() {
                return b
            },
            getItemWrap: function() {
                return h
            },
            getItems: function() {
                return h.find(e.item).not("." + e.clonedClass)
            },
            move: function(a, b) {
                return f.seekTo(i + a, b)
            },
            next: function(a) {
                return f.move(e.size, a)
            },
            prev: function(a) {
                return f.move( - e.size, a)
            },
            begin: function(a) {
                return f.seekTo(0, a)
            },
            end: function(a) {
                return f.seekTo(f.getSize() - 1, a)
            },
            focus: function() {
                d = f;
                return f
            },
            addItem: function(b) {
                b = a(b),
                e.circular ? (h.children().last().before(b), h.children().first().replaceWith(b.clone().addClass(e.clonedClass))) : (h.append(b), o.removeClass("disabled")),
                g.trigger("onAddItem", [b]);
                return f
            },
            seekTo: function(b, c, k) {
                b.jquery || (b *= 1);
                if (e.circular && b === 0 && i == -1 && c !== 0) return f;
                if (!e.circular && b < 0 || b > f.getSize() || b < -1) return f;
                var l = b;
                b.jquery ? b = f.getItems().index(b) : l = f.getItems().eq(b);
                var m = a.Event("onBeforeSeek");
                if (!k) {
                    g.trigger(m, [b, c]);
                    if (m.isDefaultPrevented() || !l.length) return f
                }
                var n = j ? {
                    top: -l.position().top
                }: {
                    left: -l.position().left
                };
                i = b,
                d = f,
                c === undefined && (c = e.speed),
                h.animate(n, c, e.easing, k ||
                function() {
                    g.trigger("onSeek", [b])
                });
                return f
            }
        }),
        a.each(["onBeforeSeek", "onSeek", "onAddItem"],
        function(b, c) {
            a.isFunction(e[c]) && a(f).on(c, e[c]),
            f[c] = function(b) {
                b && a(f).on(c, b);
                return f
            }
        });
        if (e.circular) {
            var k = f.getItems().slice( - 1).clone().prependTo(h),
            l = f.getItems().eq(1).clone().appendTo(h);
            k.add(l).addClass(e.clonedClass),
            f.onBeforeSeek(function(a, b, c) {
                if (!a.isDefaultPrevented()) {
                    if (b == -1) {
                        f.seekTo(k, c,
                        function() {
                            f.end(0)
                        });
                        return a.preventDefault()
                    }
                    b == f.getSize() && f.seekTo(l, c,
                    function() {
                        f.begin(0)
                    })
                }
            });
            var m = b.parents().add(b).filter(function() {
                if (a(this).css("display") === "none") return ! 0
            });
            m.length ? (m.show(), f.seekTo(0, 0,
            function() {}), m.hide()) : f.seekTo(0, 0,
            function() {})
        }
        var n = c(b, e.prev).click(function(a) {
            a.stopPropagation(),
            f.prev()
        }),
        o = c(b, e.next).click(function(a) {
            a.stopPropagation(),
            f.next()
        });
        e.circular || (f.onBeforeSeek(function(a, b) {
            setTimeout(function() {
                a.isDefaultPrevented() || (n.toggleClass(e.disabledClass, b <= 0), o.toggleClass(e.disabledClass, b >= f.getSize() - 1))
            },
            1)
        }), e.initialIndex || n.addClass(e.disabledClass)),
        f.getSize() < 2 && n.add(o).addClass(e.disabledClass),
        e.mousewheel && a.fn.mousewheel && b.mousewheel(function(a, b) {
            if (e.mousewheel) {
                f.move(b < 0 ? 1 : -1, e.wheelSpeed || 50);
                return ! 1
            }
        });
        if (e.touch) {
            var p = {};
            h[0].ontouchstart = function(a) {
                var b = a.touches[0];
                p.x = b.clientX,
                p.y = b.clientY
            },
            h[0].ontouchmove = function(a) {
                if (a.touches.length == 1 && !h.is(":animated")) {
                    var b = a.touches[0],
                    c = p.x - b.clientX,
                    d = p.y - b.clientY;
                    f[j && d > 0 || !j && c > 0 ? "next": "prev"](),
                    a.preventDefault()
                }
            }
        }
        e.keyboard && a(document).on("keydown.scrollable",
        function(b) {
            if (! (!e.keyboard || b.altKey || b.ctrlKey || b.metaKey || a(b.target).is(":input"))) {
                if (e.keyboard != "static" && d != f) return;
                var c = b.keyCode;
                if (j && (c == 38 || c == 40)) {
                    f.move(c == 38 ? -1 : 1);
                    return b.preventDefault()
                }
                if (!j && (c == 37 || c == 39)) {
                    f.move(c == 37 ? -1 : 1);
                    return b.preventDefault()
                }
            }
        }),
        e.initialIndex && f.seekTo(e.initialIndex, 0,
        function() {})
    }
    a.fn.scrollable = function(b) {
        var c = this.data("scrollable");
        if (c) return c;
        b = a.extend({},
        a.tools.scrollable.conf, b),
        this.each(function() {
            c = new e(a(this), b),
            a(this).data("scrollable", c)
        });
        return b.api ? c: this
    }
})(jQuery); (function(a) {
    a.tools = a.tools || {
        version: "v1.2.7"
    },
    a.tools.tabs = {
        conf: {
            tabs: "a",
            current: "current",
            onBeforeClick: null,
            onClick: null,
            effect: "default",
            initialEffect: !1,
            initialIndex: 0,
            event: "click",
            rotate: !1,
            slideUpSpeed: 400,
            slideDownSpeed: 400,
            history: !1
        },
        addEffect: function(a, c) {
            b[a] = c
        }
    };
    var b = {
        "default": function(a, b) {
            this.getPanes().hide().eq(a).show(),
            b.call()
        },
        fade: function(a, b) {
            var c = this.getConf(),
            d = c.fadeOutSpeed,
            e = this.getPanes();
            d ? e.fadeOut(d) : e.hide(),
            e.eq(a).fadeIn(c.fadeInSpeed, b)
        },
        slide: function(a, b) {
            var c = this.getConf();
            this.getPanes().slideUp(c.slideUpSpeed),
            this.getPanes().eq(a).slideDown(c.slideDownSpeed, b)
        },
        ajax: function(a, b) {
            this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"), b)
        }
    },
    c,
    d;
    a.tools.tabs.addEffect("horizontal",
    function(b, e) {
        if (!c) {
            var f = this.getPanes().eq(b),
            g = this.getCurrentPane();
            d || (d = this.getPanes().eq(0).width()),
            c = !0,
            f.show(),
            g.animate({
                width: 0
            },
            {
                step: function(a) {
                    f.css("width", d - a)
                },
                complete: function() {
                    a(this).hide(),
                    e.call(),
                    c = !1
                }
            }),
            g.length || (e.call(), c = !1)
        }
    });
    function e(c, d, e) {
        var f = this,
        g = c.add(this),
        h = c.find(e.tabs),
        i = d.jquery ? d: c.children(d),
        j;
        h.length || (h = c.children()),
        i.length || (i = c.parent().find(d)),
        i.length || (i = a(d)),
        a.extend(this, {
            click: function(d, i) {
                var k = h.eq(d),
                l = !c.data("tabs");
                typeof d == "string" && d.replace("#", "") && (k = h.filter("[href*=\"" + d.replace("#", "") + "\"]"), d = Math.max(h.index(k), 0));
                if (e.rotate) {
                    var m = h.length - 1;
                    if (d < 0) return f.click(m, i);
                    if (d > m) return f.click(0, i)
                }
                if (!k.length) {
                    if (j >= 0) return f;
                    d = e.initialIndex,
                    k = h.eq(d)
                }
                if (d === j) return f;
                i = i || a.Event(),
                i.type = "onBeforeClick",
                g.trigger(i, [d]);
                if (!i.isDefaultPrevented()) {
                    var n = l ? e.initialEffect && e.effect || "default": e.effect;
                    b[n].call(f, d,
                    function() {
                        j = d,
                        i.type = "onClick",
                        g.trigger(i, [d])
                    }),
                    h.removeClass(e.current),
                    k.addClass(e.current);
                    return f
                }
            },
            getConf: function() {
                return e
            },
            getTabs: function() {
                return h
            },
            getPanes: function() {
                return i
            },
            getCurrentPane: function() {
                return i.eq(j)
            },
            getCurrentTab: function() {
                return h.eq(j)
            },
            getIndex: function() {
                return j
            },
            next: function() {
                return f.click(j + 1)
            },
            prev: function() {
                return f.click(j - 1)
            },
            destroy: function() {
                h.off(e.event).removeClass(e.current),
                i.find("a[href^=\"#\"]").off("click.T");
                return f
            }
        }),
        a.each("onBeforeClick,onClick".split(","),
        function(b, c) {
            a.isFunction(e[c]) && a(f).on(c, e[c]),
            f[c] = function(b) {
                b && a(f).on(c, b);
                return f
            }
        }),
        e.history && a.fn.history && (a.tools.history.init(h), e.event = "history"),
        h.each(function(b) {
            a(this).on(e.event,
            function(a) {
                f.click(b, a);
                return a.preventDefault()
            })
        }),
        i.find("a[href^=\"#\"]").on("click.T",
        function(b) {
            f.click(a(this).attr("href"), b)
        }),
        location.hash && e.tabs == "a" && c.find("[href=\"" + location.hash + "\"]").length ? f.click(location.hash) : (e.initialIndex === 0 || e.initialIndex > 0) && f.click(e.initialIndex)
    }
    a.fn.tabs = function(b, c) {
        var d = this.data("tabs");
        d && (d.destroy(), this.removeData("tabs")),
        a.isFunction(c) && (c = {
            onBeforeClick: c
        }),
        c = a.extend({},
        a.tools.tabs.conf, c),
        this.each(function() {
            d = new e(a(this), b, c),
            a(this).data("tabs", d)
        });
        return c.api ? d: this
    }
})(jQuery); (function(a) {
    a.tools = a.tools || {
        version: "v1.2.7"
    },
    a.tools.tooltip = {
        conf: {
            effect: "toggle",
            fadeOutSpeed: "fast",
            predelay: 0,
            delay: 30,
            opacity: 1,
            tip: 0,
            fadeIE: !1,
            position: ["top", "center"],
            offset: [0, 0],
            relative: !1,
            cancelDefault: !0,
            events: {
                def: "mouseenter,mouseleave",
                input: "focus,blur",
                widget: "focus mouseenter,blur mouseleave",
                tooltip: "mouseenter,mouseleave"
            },
            layout: "<div/>",
            tipClass: "tooltip"
        },
        addEffect: function(a, c, d) {
            b[a] = [c, d]
        }
    };
    var b = {
        toggle: [function(a) {
            var b = this.getConf(),
            c = this.getTip(),
            d = b.opacity;
            d < 1 && c.css({
                opacity: d
            }),
            c.show(),
            a.call()
        },
        function(a) {
            this.getTip().hide(),
            a.call()
        }],
        fade: [function(b) {
            var c = this.getConf(); ! a.browser.msie || c.fadeIE ? this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) : (this.getTip().show(), b())
        },
        function(b) {
            var c = this.getConf(); ! a.browser.msie || c.fadeIE ? this.getTip().fadeOut(c.fadeOutSpeed, b) : (this.getTip().hide(), b())
        }]
    };
    function c(b, c, d) {
        var e = d.relative ? b.position().top: b.offset().top,
        f = d.relative ? b.position().left: b.offset().left,
        g = d.position[0];
        e -= c.outerHeight() - d.offset[0],
        f += b.outerWidth() + d.offset[1],
        /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
        var h = c.outerHeight() + b.outerHeight();
        g == "center" && (e += h / 2),
        g == "bottom" && (e += h),
        g = d.position[1];
        var i = c.outerWidth() + b.outerWidth();
        g == "center" && (f -= i / 2),
        g == "left" && (f -= i);
        return {
            top: e,
            left: f
        }
    }
    function d(d, e) {
        var f = this,
        g = d.add(f),
        h,
        i = 0,
        j = 0,
        k = d.attr("title"),
        l = d.attr("data-tooltip"),
        m = b[e.effect],
        n,
        o = d.is(":input"),
        p = o && d.is(":checkbox, :radio, select, :button, :submit"),
        q = d.attr("type"),
        r = e.events[q] || e.events[o ? p ? "widget": "input": "def"];
        if (!m) throw "Nonexistent effect \"" + e.effect + "\"";
        r = r.split(/,\s*/);
        if (r.length != 2) throw "Tooltip: bad events configuration for " + q;
        d.on(r[0],
        function(a) {
            clearTimeout(i),
            e.predelay ? j = setTimeout(function() {
                f.show(a)
            },
            e.predelay) : f.show(a)
        }).on(r[1],
        function(a) {
            clearTimeout(j),
            e.delay ? i = setTimeout(function() {
                f.hide(a)
            },
            e.delay) : f.hide(a)
        }),
        k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)),
        a.extend(f, {
            show: function(b) {
                if (!h) {
                    l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next()));
                    if (!h.length) throw "Cannot find tooltip for " + d
                }
                if (f.isShown()) return f;
                h.stop(!0, !0);
                var o = c(d, h, e);
                e.tip && h.html(d.data("title")),
                b = a.Event(),
                b.type = "onBeforeShow",
                g.trigger(b, [o]);
                if (b.isDefaultPrevented()) return f;
                o = c(d, h, e),
                h.css({
                    position: "absolute",
                    top: o.top,
                    left: o.left
                }),
                n = !0,
                m[0].call(f,
                function() {
                    b.type = "onShow",
                    n = "full",
                    g.trigger(b)
                });
                var p = e.events.tooltip.split(/,\s*/);
                h.data("__set") || (h.off(p[0]).on(p[0],
                function() {
                    clearTimeout(i),
                    clearTimeout(j)
                }), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.off(p[1]).on(p[1],
                function(a) {
                    a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0])
                }), e.tip || h.data("__set", !0));
                return f
            },
            hide: function(c) {
                if (!h || !f.isShown()) return f;
                c = a.Event(),
                c.type = "onBeforeHide",
                g.trigger(c);
                if (!c.isDefaultPrevented()) {
                    n = !1,
                    b[e.effect][1].call(f,
                    function() {
                        c.type = "onHide",
                        g.trigger(c)
                    });
                    return f
                }
            },
            isShown: function(a) {
                return a ? n == "full": n
            },
            getConf: function() {
                return e
            },
            getTip: function() {
                return h
            },
            getTrigger: function() {
                return d
            }
        }),
        a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),
        function(b, c) {
            a.isFunction(e[c]) && a(f).on(c, e[c]),
            f[c] = function(b) {
                b && a(f).on(c, b);
                return f
            }
        })
    }
    a.fn.tooltip = function(b) {
        var c = this.data("tooltip");
        if (c) return c;
        b = a.extend(!0, {},
        a.tools.tooltip.conf, b),
        typeof b.position == "string" && (b.position = b.position.split(/,?\s/)),
        this.each(function() {
            c = new d(a(this), b),
            a(this).data("tooltip", c)
        });
        return b.api ? c: this
    }
})(jQuery);